Delphi XE10 序列化 TDictionary 为 JSON 的问题

您所在的位置:网站首页 delphiXE json Delphi XE10 序列化 TDictionary 为 JSON 的问题

Delphi XE10 序列化 TDictionary 为 JSON 的问题

2024-07-11 12:21| 来源: 网络整理| 查看: 265

S := TJson.ObjectToJsonString(FMyObjectList);

AObjectList := TJson.JsonToObject(S);

2. 照上述方法,序列化一个 TDictionary 为字符串也成功。然后,反序列化回来也成功。

S := TJson.ObjectToJsonString(FMyDictionary); 

MyDictionary := TJson.JsonToObject(S);

上述代码,执行成功。

但是,它并没有生成 TDictionary 内部应该有的一个 private 的对象 FComparer: IEqualityComparer;

这样一来,如果对反序列化回来的 MyDictionary 进行常规的索引读操作,比如 MyDictionary.Items['abc'] 则因为这样的方法会调用到 TDictionary 内部的 GetBucketIndex 方法,而这个方法要用到 FComparer,就会导致 AV 错误。

对这样反序列化回来,内部缺乏 FCompare 的 TDictionary,做以下操作是成功的:

for S in AList.Keys do  这样循环是成功的。   begin     Memo1.Lines.Add(S);   end;      for O in AList.Values do   begin     Memo1.Lines.Add(O.FThumbnailName);  这样循环也是成功的。   end;

----------------------------------------------

综上所述,如果想把一个 TDictionary 序列化为 JSON 再恢复,需要多做一点:反序列化时,自己创建一个 TDictionayr 的实例(自己创建的,是包含 FComparer 的),然后对反序列化回来的 TDictionary 进行一个循环,将里面的内容,全都复制到自己创建的 TDictionary 里面去。自己创建的这个就可以用了。

又及:好像这个问题在 10.2 里面已经改好了。我没有测试过 10.2



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3